#ifndef __CONTEXTO_DE_EJECUCION_FACTORY_H__
#define __CONTEXTO_DE_EJECUCION_FACTORY_H__

#include "ActualizadorPantallaCommand.h"
#include "InformacionCarreraFactory.h"
#include "InformacionMateriasFactory.h"
#include "RestriccionesFactory.h"
#include "RequisitosDeEjecucion.h"

using namespace controlador;

namespace servicios {

	class ContextoDeEjecucionFactory
	{
	public:
		ContextoDeEjecucionFactory(RequisitosDeEjecucion* requisitos);
		~ContextoDeEjecucionFactory(void);

		ContextoDeEjecucion* Construir(ActualizadorPantallaCommand* actualizadorPantalla);

	private:
		RequisitosDeEjecucion* requisitos;
		ParserYAML* parserYAML;
		ContextoDeEjecucion* contexto;
		InformacionCarreraFactory* informacionCarreraFactory;
		InformacionMateriasFactory* informacionMateriasFactory;
		RestriccionesFactory* restriccionesFactory;

		ContextoDeEjecucionFactory* CrearConInformacionDeCarrera(ActualizadorPantallaCommand* actualizadorPantalla);
		ContextoDeEjecucionFactory* CrearConInformacionDeMaterias(ActualizadorPantallaCommand* actualizadorPantalla);
		ContextoDeEjecucionFactory* CrearConRestriccionesDeterministicas(ActualizadorPantallaCommand* actualizadorPantalla);
		ContextoDeEjecucionFactory* CrearConRestriccionesNoDeterministicas(ActualizadorPantallaCommand* actualizadorPantalla);

		InformacionRestriccionesDeterministicas* CrearInformacionRestriccionesDeterministicasDefault();
	    InformacionRestriccionesNoDeterministicas* CrearInformacionRestriccionesNoDeterministicasDefault();
	};
}
#endif